<?php

// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.application.component.model');

/**
 * Modelo de asistencia diaria
 *
 */
class ReghsModelAsistencia extends JModel {
    /**
     * Constructor that retrieves the ID from the request
     *
     * @access	public
     * @return	void
     */
    function __construct() {
        parent::__construct();

        $array = JRequest::getVar('cid',  0, '', 'array');
        $this->setId((int)$array[0]);
    }

    function setId($id) {
        // Set id and wipe data
        $this->_id		= $id;
        $this->_data	= null;
    }

    function &getData() {
        // Load the data
        if (empty( $this->_data )) {
            $query = ' SELECT * FROM #__asistencia_diaria '.
                    '  WHERE asistencia_diaria_id = '.$this->_id;
            $this->_db->setQuery( $query );
            $this->_data = $this->_db->loadObject();
        }
        if (!$this->_data) {
            $this->_data = new stdClass();
            $this->_data->asistencia_diaria_id = 0;
            $this->_data->fecha = null;
            $this->_data->hora_entrada = null;
            $this->_data->hora_salida = null;
            $this->_data->actividad = NULL;
            $this->_data->tema = NULL;
            $this->_data->agente_id = NULL;
            $this->_data->resoluciones_cargos_id = NULL;
            $this->_data->actividad_id = NULL;
            $this->_data->emitida = null;
        }
        return $this->_data;
    }

    /**
     * Method to store a record
     *
     * @access	public
     * @return	boolean	True on success
     */
    function store() {
        $row =& $this->getTable('asistencias');

        $data = JRequest::get( 'post' );

        //chequeo si son array los datos recibidos del post
        //si es asi los datos vienen del ingreso en tabla
        if(is_array($data['resoluciones_cargos_id'])) {

            foreach ($data['resoluciones_cargos_id'] as $key => $res_id) {
                
                $row =& $this->getTable('asistencias');
                $row->fecha = $data['fecha'][$key];
                //$row->asistencia_diaria_id = $data->asistencia_diaria_id[$key];
                //$row->asistencia_diaria_id = 0;
                $row->hora_entrada = $data['hora_entrada'][$key];
                $row->hora_salida = $data['hora_salida'][$key];
                $row->actividad = $data['actividad'][$key];
                $row->tema = $data['tema'][$key];
                $row->agente_id = $data['agente_id'];
                $row->resoluciones_cargos_id = $res_id;
                //$row->actividad_id = $data['actividad_id'][$key];
                $row->actividad_id = null;
                //$row->emitida = $data['emitida'][$key];
                $row->emitida = null;
                
                // Make sure the record is valid
                if (!$row->check()) {
                    $this->setError($this->_db->getErrorMsg());
                    return false;
                }
                //
                if (!$row->asistencia_diaria_id) {
                    if ((strlen($row->hora_entrada) == 2)OR(strlen($row->hora_entrada) == 1)) {
                        $original = $row->hora_entrada;
                        $lugar = strlen($row->hora_entrada) + 1;
                        $insertar = ":00";
                        $resultado = substr($original, 0, $lugar) . $insertar . substr($original, $lugar);
                        $row->hora_entrada = $resultado;
                    }
                    if ((strlen($row->hora_salida) == 2)OR(strlen($row->hora_salida) == 1)) {
                        $original = $row->hora_salida;
                        $lugar = strlen($row->hora_salida) + 1;
                        $insertar = ":00";
                        $resultado = substr($original, 0, $lugar) . $insertar . substr($original, $lugar);
                        $row->hora_salida = $resultado;
                    }
                    if (strlen($query=$row->validaRepetido())!=0) {
                        //$this->setError($this->_db->getErrorMsg());
                        $this->setError('Registro repetido para la asistencia ingresada: '.$query);
                        return false;
                    }
                    if(strlen($query=$row->validaSuperposicion())!=0) {
                        $this->setError('Existe superposicion de horas en la asistencia: '.$query);
                        return false;
                    }
                }

                if (!$row->store()) {
                    $this->setError($this->_db->getErrorMsg());
                    return false;
                }
            }
            return true;
        }       // Bind the form fields to the table
        else {

            if(!$row->bind($data)) {
                $this->setError($this->_db->getErrorMsg());
                return false;
            }

            // Make sure the record is valid
            if (!$row->check()) {
                $this->setError($this->_db->getErrorMsg());
                return false;
            }

            if (!$row->asistencia_diaria_id) {
                if ((strlen($row->hora_entrada) == 2)OR(strlen($row->hora_entrada) == 1)) {
                    $original = $row->hora_entrada;
                    $lugar = strlen($row->hora_entrada) + 1;
                    $insertar = ":00";
                    $resultado = substr($original, 0, $lugar) . $insertar . substr($original, $lugar);
                    $row->hora_entrada = $resultado;
                }
                if ((strlen($row->hora_salida) == 2)OR(strlen($row->hora_salida) == 1)) {
                    $original = $row->hora_salida;
                    $lugar = strlen($row->hora_salida) + 1;
                    $insertar = ":00";
                    $resultado = substr($original, 0, $lugar) . $insertar . substr($original, $lugar);
                    $row->hora_salida = $resultado;
                }
                if (strlen($query=$row->validaRepetido())!=0) {
                        //$this->setError($this->_db->getErrorMsg());
                        $this->setError('Registro repetido para la asistencia ingresada: '.$query);
                        return false;
                    }
                    if(strlen($query=$row->validaSuperposicion())!=0) {
                        $this->setError('Existe superposicion de horas en la asistencia: '.$query);
                        return false;
                    }
            }
            //
            if (!$row->store()) {
                $this->setError($this->_db->getErrorMsg());
                return false;
            }
            return true;
        }
    }
    /**
     * Method to delete record(s)
     *
     * @access	public
     * @return	boolean	True on success
     */
    function delete() {
        $cids = JRequest::getVar( 'cid', array(0), 'post', 'array' );

        $row =& $this->getTable("asistencias");

        if (count( $cids )) {
            foreach($cids as $cid) {

                if (!$row->delete( $cid )) {
                    $this->setError( $row->getErrorMsg() );
                    return false;
                }
            }
        }
        return true;
    }


    //funcion para obtener la lista de agentes
    function listaAgentes() {

        $db =& JFactory::getDBO();

        $query = ' SELECT id, name FROM #__users '.
                '  WHERE block = 0';
        $db->setQuery( $query );

        //devuelve un arreglo con todas las filas de la consulta
        $rows = $db->loadRowList();

        return $rows;

    }

    function listaCargos() {

        $db =& JFactory::getDBO();
        $query = ' SELECT cargo_id, nombre FROM #__cargos '.
                '  WHERE activa = 1';
        $db->setQuery( $query );

        //devuelve un arreglo con todas las filas de la consulta
        $rows = $db->loadRowList();

        return $rows;

    }

    //hacer funcion que resuelve el select
    //recupero los cargos establecidos en las resoluciones del usuario
    //vigentes a la fecha
    function listaCargosFechaHoy() {

        //recupero la conexion a la base de datos
        $db =& JFactory::getDBO();

        //recupero id usuario conectado
        $usuario =& JFactory::getUser();
        $idusuario = $usuario->get('id');

        //armo consulta
        $query = ' select r.cargo_id, c.nombre '.
                ' from #__resoluciones_cargos r, #__cargos c '.
                ' where curdate() between r.vigencia_desde and r.vigencia_hasta '.
                'and r.agente_id = '.$idusuario.' and r.cargo_id = c.cargo_id '.
                'and c.activa = 1 ';

        $db->setQuery( $query );

        //devuelve un arreglo con todas las filas de la consulta
        $rows = $db->loadRowList();

        return $rows;

    }


    //funcion
    function listaMateriasCargo($usuarioid, $cargoid) {
        //recupero la conexion a la base de datos
        $db =& JFactory::getDBO();

        //armo consulta
        $query = ' select r._id, m.nombre '.
                ' from #__resoluciones_cargos r, #__materias c '.
                ' where curdate() between r.vigencia_desde and r.vigencia_hasta '.
                'and r.agente_id = '.$idusuario.' and r.cargo_id = c.cargo_id '.
                'and c.activa = 1 ';

        $db->setQuery( $query );

        //devuelve un arreglo con todas las filas de la consulta
        $rows = $db->loadRowList();

        return $rows;

    }

    function listaCargosMaterias() {

        //recupero la conexion a la base de datos
        $db =& JFactory::getDBO();

        //recupero id usuario conectado
        $usuario =& JFactory::getUser();
        $idusuario = $usuario->get('id');

        //armo consulta
        $query = ' select c.nombre cargo, m.nombre materia, r.resoluciones_id  '.
                ' from #__resoluciones_cargos r
                   left join #__materias m  on r.materia_id = m.materia_id, #__cargos c '.
                ' where curdate() between r.vigencia_desde and r.vigencia_hasta '.
                'and r.agente_id = '.$idusuario.' and r.cargo_id = c.cargo_id '.
                'and c.activa = 1 ';

        $db->setQuery( $query );

        //devuelve un arreglo con todas las filas de la consulta
        $rows = $db->loadRowList();

        return $rows;

    }

    //devuelve un registro de asistencia
    //para un id y agente determinado
    function getAsistencia($id,$agente) {

        $db =& JFactory::getDBO();
        $query = " SELECT * FROM #__asistencia_diaria a WHERE a.asistencia_diaria_id = $id and a.agente_id = $agente";
        $db->setQuery( $query );

        return $db->loadObject();
    }

    //devuelve un registro de asistencia
    //para un id y agente determinado
    function getAsistencias($ids,$agente) {
        $idsList = implode(',', $ids);
        $db =& JFactory::getDBO();
        $query = " SELECT * FROM #__asistencia_diaria a WHERE a.asistencia_diaria_id IN ($idsList) and a.agente_id = $agente";
        $db->setQuery( $query );

        return $db->loadObjectList();
    }
}
?>
